#include <stdio.h>
#include <termios.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "gps.h"

// 函数：get_gps_data
// 描述：从数据缓冲区解析GPS数据，并填充到结构体中
// 参数：
//   - buff: 指向包含GPS数据的缓冲区的指针
//   - gps_data: 指向结构体 gprmc_data 的指针，用于存储解析后的GPS数据
// 返回值：无
void get_gps_data(char *buff, struct gprmc_data *gps_data) {
    char *p=NULL;
    // 在缓冲区中查找以 "$GPRMC" 开头的位置
    p = strstr(buff, "$GPRMC");
    if (p == NULL) {
       // printf("Error: $GPRMC not found in buffer.\n");
        return;  // 如果未找到 "$GPRMC"，直接返回
    }
    // 使用 sscanf 函数从字符串 p 开始按指定格式解析数据，并存储到 gps_data 结构体中对应的成员变量中
    sscanf(p,"$GPRMC,%d.00,%c,%f,%c,%f,%c,%f,,%d,,,%c,%*c",\
    &(gps_data->time),\
    &(gps_data->state),\
    &(gps_data->latitude),\
    &(gps_data->NS),\
    &(gps_data->longitude),\
    &(gps_data->EW),\
    &(gps_data->speed),\
    &(gps_data->date),\
    &(gps_data->mode));
    

    // 打印解析后的部分 GPS 数据，用于验证解析是否正确（可选）
    printf("state:%c, %c:%f, %c:%f\n", gps_data->state, gps_data->NS,
           gps_data->latitude, gps_data->EW, gps_data->longitude);

}
